package com.tbit.uqbike.webmanager.dao.core;


import com.tbit.uqbike.object.pojo.MemberFee;
import com.tbit.uqbike.object.pojo.MoneyData;
import com.tbit.uqbike.object.pojo.StatPark;
import com.tbit.uqbike.object.pojo.UserMember;
import com.tbit.uqbike.object.pojo.statistics.DepositOrderDaySta;
import com.tbit.uqbike.object.value.UserRcDetail;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 免押会员
 *
 * @author Leon
 * 2019年9月23日 下午8:33:34
 */
public interface MemberFeeDao {
    /**
     * 添加会员费率
     *
     * @param memberFee
     */
    void add(MemberFee memberFee);

    /**
     * 更新会员费率
     */
    void update(MemberFee memberFee);

    /**
     * 查找会员费率
     *
     * @param params
     * @return
     */
    List<MemberFee> find(Map<String, Object> params);

    /**
     * 删除会员费率
     *
     * @param menberFeeId
     */
    void del(Map<String, Object> params);

    /**
     * 查询总数
     *
     * @param accountId
     * @return
     */
    Integer queryCount(Integer accountId);

    /**
     * 置为失效
     *
     * @param memberFeeId
     */
    void edit(Integer memberFeeId);

    MemberFee getById(Integer memberFeeId);

    /**
     * 用户购买免押套餐记录
     *
     * @param params
     * @return
     */
    List<UserMember> userMemPage(Map<String, Object> params);

    /**
     * 用户购买免押套餐记录总数
     *
     * @param params
     * @return
     */
    Integer userMemCount(Map<String, Object> params);

    /**
     * 统计免押订单总数
     */
    Integer getMoneyByTime(Map<String, Object> params);

    /**
     * 订单按天统计或按月统计
     */
    List<StatPark> statByType(Map<String, Object> params);

    /**
     * 按代理分组，统计时间段内订单总数及总金额
     */
    List<MoneyData> groupByAccountId(Map<String, Object> params);

    /**
     * 免押卡统计分页
     */
    List<UserRcDetail> getMemPage(Map<String, Object> map);

    /**
     * 免押卡统计分页总数
     */
    Integer getMemCount(Map<String, Object> map);

    /**
     * 免押卡统计导出
     */
    List<UserRcDetail> export(Map<String, Object> map);

    /**
     * 免押卡统计总金额
     */
    MoneyData getTotalMoney(Map<String, Object> map);

    List<Map<String, Object>> selectMemCountByType(HashMap<Object, Object> params);

    /**
     * 统计前一天的米娜呀订单总数
     */
    Map<String, Object> statYesterdayMem(Map<String, Object> params);

    /**
     * stat mem
     *
     * @param params 参数个数
     * @return {@link DepositOrderDaySta}
     */
    DepositOrderDaySta statMem(Map<String, Object> params);

    /**
     * 按天统计免押卡
     */
    List<Map<String, Object>> statByDay(Map<String, Object> params);

    List<Map<String, Object>> statByDayLog(Map<String, Object> params);


    int updateExpireTime(String orderNO);

    Map<String, Object> selectByOrderNO(String orderNO);

    int countValid(@Param("accountId") Integer accountId, @Param("userId") Integer userId);

    void updateExpireTimes(@Param("expireTime") String expireTime, @Param("accountId") Integer accountId, @Param("userId") Integer userId, @Param("type") Integer type);

    /**
     * 查询区域押金配置
     * @param accountId 区域id
     * @return MemberFee
     */
    List<MemberFee> selectByAccountId(@Param("accountId") Integer accountId);

    /**
     * 批量添加
     * @param memberFees
     */
    void batchAdd(@Param("memberFees") List<MemberFee> memberFees);

    void delByAccountId(@Param("accountId") Integer accountId);

    /**
     * 根据用户id和区域id集合购买免押套餐记录
     *
     * @param userId        用户id
     * @param accountIdList 区域id集合
     */
    UserMember userVipPageByAccountIdList(@Param("userId") Integer userId, @Param("accountIdList") List<Integer> accountIdList);
}
